package com.example.demo;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;

import javax.annotation.PostConstruct;

/**
 * 读取配置文件中的信息
 */

@Controller
@ResponseBody
// @PropertySource(value = "application.properties", encoding = "utf-8") --> 框架问题 编码设置解决乱码不成功
public class GetConfig {
    // 错误示范:
    // @Value("myTest")
    // private String test;
    // 这是将字符串 "myTest" 赋值给了 test 变量.

    // 正确示范: 用 ${} 包起来
    @Value("${myTest}")
    private String test;

    @Value("${myTest2}")
    private String test2;

    @RequestMapping("/getConfig")
    public String getConfig() {
        return "myTest: " + test + ", myTest2: " + test2;
    }

    @Value("${server.port}")
    private String post;
    @RequestMapping("/getPost")
    public String getPost() {
        return post;
    }

// value 值加单双引号: 加了双引号的 value 比较特殊. + 读取对象
    @Value("${myString}")
    private String myString;
    @Value("${myString2}")
    private String myString2;
    @Value("${myString3}")
    private String myString3;
    @Autowired
    private StudentConfig student;
    @Autowired
    private ListConfig listConfig;
    // @Autowired 时说过, 属性是在构造方法之前加载的, 因此此处就在构造方法中读取属性.
    @PostConstruct // 表示该方法是构造方法.
    public void postConstruct() {
        System.out.println("myString: " + myString);
        System.out.println("myString1: " + myString2);
        System.out.println("myString2: " + myString3);
        System.out.println(student); // 读取对象
        System.out.println(listConfig.getName()); // 读取集合
    }
}
